#include <iostream>
#include <string>
#include <fstream>
#include <jsoncpp/json/json.h>
// json这个库的头文件在/usr/include/jsoncpp/json/目录中，
// 编译器默认在/usr/include/这个目录中去寻找，所以引用json.h头文件需要指明jsoncpp/json/json.h头文件地址
using namespace std;

struct stu
{
    string name;
    int age;
    int weight;

public:
    void Debug()
    {
        cout << name << endl;
        cout << age << endl;
        cout << weight << endl;
    }
};
// 反序列化
int main()
{
    ifstream in("./out.txt");
    if (in.is_open() == false)
    {
        return 1;
    }
    // 先将文件中的信息读取到buffer缓冲区中
    char buffer[1024];
    in.read(buffer, sizeof(buffer));
    // 反序列化
    string json_string = buffer;
    Json::Value root; // 定义jsonvalue对象
    Json::Reader reader;
    bool res = reader.parse(json_string, root);

    struct stu zs;
    zs.name = root["name"].asString();
    zs.age = root["age"].asInt();
    zs.weight = root["weight"].asDouble();
    zs.Debug();

    return 0;
}

// //序列化
// int main()
// {
//     struct stu zs = {"hello", 10, 22};
//     Json::Value root;
//     root["name"] = zs.name;
//     root["age"] = zs.age;
//     root["weight"] = zs.weight;

//     // Json::FastWriter writer; // {"age":10,"name":"hello","weight":22}
//     Json::StyledWriter writer; //{
//                                //     "age" : 10,
//                                //     "name" : "hello",
//                                //     "weight" : 22
//                                //  }
//     // 两种不同风格的序列化方式
//     //  将结构化字段序列化为字符串
//     string str = writer.write(root);

//     // cout << str << endl;

//     ofstream out("./out.txt");
//     if (out.is_open() == false)
//     {
//         cout << str << endl;
//         return 1;
//     }
//     out << str; // 将str字符串写入到文件中

//     out.close();
//     return 0;
// }